package org.zn.mvcbase.mybatis.handler;

import com.alibaba.fastjson.JSON;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.MappedJdbcTypes;
import org.apache.ibatis.type.MappedTypes;

import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Map;

/**
 * @author 崔超
 * @date 2017年10月13日
 * @description Mybaits json2string转换器
 * @version 1.00 beta
 */
@MappedTypes(value= {String.class})
@MappedJdbcTypes(value={JdbcType.OTHER})
public class Json2Map extends BaseTypeHandler<Object>{
	/**
	 * @author 崔超
	 * @date 2017年4月13日
	 * @description 程序-->数据库转换器
	 * @version 1.00 beta
	 * @see BaseTypeHandler#setNonNullParameter(PreparedStatement, int, Object, JdbcType)
	 */
	public void setNonNullParameter(PreparedStatement ps, int i, Object parameter, JdbcType jdbcType)	throws SQLException {
		String jsonString = JSON.toJSONString(parameter);
		ps.setObject(i, jsonString);	
	}
	/**
	 * 
	 * @author 崔超
	 * @date 2017年4月13日
	 * @description 数据库-->程序转换器
	 * @version 1.00 beta
	 * @see BaseTypeHandler#getNullableResult(ResultSet, String)
	 */
	@Override
	public Object getNullableResult(ResultSet rs, String columnName) throws SQLException {
		String jsonString = rs.getString(columnName);
		return JSON.parseObject(jsonString, Map.class);
	}
	/**
	 * 
	 * @author 崔超
	 * @date 2017年4月13日
	 * @description 数据库-->程序转换器
	 * @version 1.00 beta
	 * @see BaseTypeHandler#getNullableResult(ResultSet, int)
	 */
	@Override
	public Object getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
		String jsonString = rs.getString(columnIndex);
		return JSON.parseObject(jsonString, Map.class);
	}
	/**
	 * 
	 * @author 崔超
	 * @date 2017年4月13日
	 * @description 数据库-->程序转换器
	 * @version 1.00 beta
	 * @see BaseTypeHandler#getNullableResult(CallableStatement, int)
	 */
	@Override
	public Object getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
		String jsonString = cs.getString(columnIndex);
		return JSON.parseObject(jsonString, Map.class);
	}
}
